問題1. 自由度極高,因此缺乏對應的方法便容易造成難以維護的問題
css幾乎不存在著只能這樣寫的作法,因此再多人開發習慣皆不同時,很容易造成維護上的問題
問題2. 不同命名,卻有相同效果
不同人一起開發時,可能還會有不同命名,卻有相同效果:
block1__text_highlightt {
color: yellow;
}
...
block2__text_bright {
color: yellow;
}
希望定義一個CSS撰寫規則,能讓 CSS 在大型專案下能擁有更好的重用性與維護性
There are only two hard things in Computer Science: cache invalidation and naming things.
– Phil Karlton
只要確保同一個 style 永遠只會被定義一次,並且可以運用在各個地方,就能解決這些問題!
一般寫法
<!-- 一般的寫法 -->
<div class="card">
<h5 class="card-title">測試標題</h5>
</div>
.card{
display: flex;
width: 300px;
}
.card-title{
font-size: 18px;
color: blue;
}
Atomic css 寫法:
<div class="D(f) W(300px)">
<h5 class="FS(18px) C(blue)">測試標題</h5>
</div>
.D\(f\) {
display: flex;
}
.W\(300px\) {
width: 300px;
}
.FS\(18px\) {
font-size: 18px;
}
.C\(blue\) {
color: blue;
}
什麼邪魔歪道! 一點可讀性也沒有
class="f-sm bg-blue"
跟style="font-size: 10px; background-color: #0000ff;"
以一般的寫法,一看就知道是一張卡,有標題
<!-- 一般的寫法 -->
<div class="card">
<h5 class="card-title">測試標題</h5>
</div>
Atomic css 寫法... 這是... ?
<!--Atomic寫法 -->
<div class="D(f) W(300px)">
<h5 class="FS(18px) C(blue)">測試標題</h5>
</div>
但,其實你可以一起用啊,看看以下:
<!-- 融合版的寫法 -->
<div class="card D(f) W(300px)">
<h5 class="card-title FS(18px) C(blue)">測試標題</h5>
</div>
假設我有一個 button 用 Atomic css 之後長這樣:
<div class="BG(blue) FS(14px) C(white)">按鈕文字</div>
你心裡的OS ...
那如果我有其他地方要用這個 button,我不就要複製這一串?
如果我 button 的樣式換了,那我不就所有地方都要改?
這個重用性也太差了吧。
但,其實你應該把這個東西變成一個 component,這樣問題就迎刃而解了,因為你只要改 component 就好,不用每個地方都改。
IT CSS = Inverted Triangle CSS
Settings
Tools
Generic
Elements
Objects
Components
Utilities
淺談 CSS 方法論與 Atomic CSS
https://blog.techbridge.cc/2017/04/29/css-methodology-atomiccss/
Atomic CSS 官方文件
https://acss.io/
邪魔歪道還是苦口良藥?Functional CSS 經驗分享
https://blog.techbridge.cc/2019/01/26/functional-css/
In defense of Functional CSS
https://critter.blog/2018/06/08/in-defense-of-functional-css/
ITCSS: Scalable and Maintainable CSS Architecture
https://www.xfive.co/blog/itcss-scalable-maintainable-css-architecture/
How to Organize your Styles with ITCSS
https://blog.codeminer42.com/how-to-organize-your-styles-with-itcss-3787cbc6dcbf
Understanding ITCSS: Real case using ITCSS in a GhostCMS blog
https://dev.to/carlillo/understanding-itcss-real-case-using-itcss-in-a-ghostcms-blog-1p9b